import java.util.*;
public class Main {
    //给定一个二进制数组 nums 和一个整数 k，假设最多可以翻转 k 个 0 ，则返回执行操作后 数组中连续 1 的最大个数 。
    public static int seek(int[] nums,int k) {
        int n=nums.length;
        int left=0;
        int result=0;
        int[] arr=new int[2];
        for(int right=0;right<n;right++){
            int temp=nums[right];
            if(temp==0)arr[0]++;
            if(temp==1)arr[1]++;
            while(arr[0]>k){
                int temp1=nums[left];
                if(temp1==0)arr[0]--;
                left++;
            }
            result=Math.max(result,right-left+1);
        }
        return result;
    }
    public static void main(String[] args) {
     Scanner sc=new Scanner(System.in);
     int n=sc.nextInt();
     int[]nums=new int[n];
     for(int i=0;i<n;i++) nums[i] = sc.nextInt();
     int k=sc.nextInt();
     int resultcount=seek(nums,k);
     System.out.println(resultcount);
     sc.close();
    }
}